Applications characterized as “latency sensitive” are, typically, highly susceptible to execution delays and jitter (i.e., unpredictability) introduced by the computing environment in which these applications run. Examples of latency sensitive applications include financial trading systems, which usually require response time on the order of microseconds when performing functions such as pricing securities or executing and settling trades.
Execution delay and jitter are often present in networked virtualized computing environments. Such computing environments frequently include a number of virtual machines (VMs) that execute one or more applications that rely on network communications. These virtualized applications communicate over the network by transmitting data packets to other nodes on the network using a virtual network interface controller (or VNIC) of the VM, which is a software emulation of a physical network interface controller (or PNIC). The use of a VNIC for network communication adds to the layers of networking software required for processing data packets. For example, the VM transmits packets to a VNIC. The VNIC, in turn, transmits packets to a virtual switch, which is a software emulation of a physical network switch. Finally, the virtual switch transmits data packets to a PNIC of the host computer for further transmission over the network. As a result, employing a VNIC for network communication often results in latency and jitter.
In order to address the latency issues that are present with the use of VNICs, virtual switches, and PNICs, a number of virtualized computing environments use passthrough NICs. A passthrough NIC is a physical NIC that is part of the hardware platform of a computer host, and that is directly accessible to vitualized networking software that executes in a virtual machine. That is, the virtualized networking software transmits and receives data packets to and from the passthrough NIC without using a VNIC and virtual switch. This tends to eliminate some of the latency present in virtualized networking environments.
However, some latency may still be present when passthrough NICs are used instead of VNICs and virtual switches. For example, when a virtual machine transmits and receives packets over a passthrough NIC, the passthrough NIC needs to inform the virtual machine that it is ready to transmit packets, or that it has packets that are ready to be delivered to the virtual machine. This is typically accomplished by an interrupt mechanism. That is, for passthrough NICs that operate in an interrupt mode (as opposed to a polling mode), the pasthrough NIC generates an interrupt to communicate events to the host computer that it is connected to. As such, when the passthrough NIC generates an interrupt, an interrupt controller of the host computer that the passthrough NIC is connected to receives the interrupt and calls an interrupt handler for the passthrough NIC. The memory address of the interrupt handler is located using an interrupt vector.
When an interrupt needs to be posted to a virtual machine, the kernel typically schedules and dispatches one or more tasks to forward the interrupt. In a multiprocessor system, these tasks may be scheduled (i.e., queued for execution) to any of the processors on the host computer in accordance with a scheduling algorithm followed by the kernel. Once the tasks are scheduler and dispatched, the interrupt is posted to virtualized interrupt handling software in the virtual machine. However, the scheduling and other kernel processing for the interrupt posting tasks are an additional source of latency. That is, due to this “extra” kernel processing, there is delay and unpredictability associated with communicating interrupts for the passthrough NIC to the virtual machine.